<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title></title>
</head>

<body>

</body>
<script>
  // 字符串
  var str = "hello world"

  // 获取字符串长度 .length
  console.log(str.length)

  // 获取单一字符串 charAt 、 [下标]
  console.log(str.charAt(0))
  console.log(str[0])

  // 字符串查找 参数：要查找的字符串 和 从哪里开始
  console.log(str.indexOf('w'))
  console.log(str.indexOf('l', 5))

  // 是否包含指定的字符串
  console.log(str.includes('world'))
  console.log(str.includes('javascript'))

  // 获取子字符串
  // 参数：开始获取的下标和长度
  console.log(str.substr(6, 5))
  // 参数：开始和结束下标 [start, end)
  console.log(str.substring(0, 5))

  // 把字符串转为数组 split 参数：spliter
  console.log(str.split())
  console.log(str.split(''))
  console.log(str.split(' '))
  console.log(str.split('l'))

  // 反转数组 reverse
  var arr = [1, 3, 5, 7, 9]
  console.log(arr.reverse())

  // 数组转字符串 join 
  console.log(arr.join())
  console.log(arr.join(','))
  console.log(arr.join(''))

  // 需求：把一个字符串反转过来
  // 1.把字符串转为数组
  // 2.把数组反转过来
  // 3.把数组转为字符串

  var str1 = 'I love Chengdu University'
  // 1.把字符串转为数组
  var arr1 = str1.split('')
  // 2.把数组反转过来
  arr1.reverse()
  // 3.把数组转为字符串
  var str1_reverse = arr1.join('')
  console.log(str1)
  console.log(str1_reverse)

  // 遍历
  // for
  for (var i = 0; i < arr.length; i++) {
    // console.log(arr[i])
  }
  // for in 访问的是下标
  for (var j in arr) {
    // console.log(arr[j])
  }

  for (var item of arr) { // 访问的是数组的每一项元素
    // console.log(item)
  }

  // 数组上的方法
  // forEach 用于遍历
  arr.forEach(function (value, index) {
    // console.log(value, index)
  })

  // map 用于得到数组经过处理后的每项元素
  var newArr = arr.map(function (value, index) {
    // console.log(value, index)
    return value * 2
  })
  console.log(newArr)

  // 函数柯里化和高阶函数
  // 可以将函数赋值给一个变量
  var fn1 = function () {
    console.log('我是函数表达式，赋值给了fn1')
    return function () {
      console.log('我是返回的函数')
    }
  }

  // 高阶函数：高阶函数是一个接收函数作为参数或将函数作为输出返回的函数。
  // var result = fn1()
  // console.log(result)
  // result()
  fn1()()

  // 函数柯里化：是把接受多个参数的函数变换成接受一个单一参数（最初函数的第一个参数）的函数
  function add(a, b, c) {
    return a + b + c
  }
  console.log(add(1, 2, 3))

  // 柯里化写法
  function add1(a) {
    return function (b) {
      return function (c) {
        return a + b + c
      }
    }
  }
  console.log(add1(1)(2)(3))
  
</script>

</html>